#1.函数的定义
'''
def 函数名([参数名1,参数名2,....]):
    函数封装的语句块

注意：
1.函数名符合标识符定义的规则，函数名后面要写上(),后面写上冒号(:)
2.函数定义时，()中的参数称之为形式参数
3.函数封装的语句块另起一行写，缩进4空格，且要对齐
4.[]不是函数定于语法中的一部分，仅表示是可选的


'''
#2.函数的调用
'''
函数名([参数1，参数2，....])

注意：
1.函数只有调用过才会执行代码
2.函数调用时，()的参数称之为实际参数（定义并赋值过的变量或者数据）

'''

#3.无参数的函数
def star():
    row=1
    while row<=5:
        print("*"*row)
        row+=1

#调用定义的函数
star() 
star()

#4.有返回值的函数
def add(num1,num2):
    """
    num1:第一个数
    num2:第二个数
    返回值，两个数的和
    """
    return num1+num2 

#调用
n1=20
n2=40
add(n1,n2)   
#保存函数调用后返回的结果
n3=add(n1,n2) 
print(n3)  
#直接打印输出函数调用后返回的值
print(add(30,5))    

print(star())    #返回None 表示空
print(type(None)) 
# print(None+1)    #不能当作数字进行运算
# print(None+"123")  #不能当作字符串进行运算  
print(None and True)   

#5.返回多个值的函数
def max_and_min(mystr):
    c1 = max(mystr)
    c2 = min(mystr) 
    return c1,c2  

#调用
print(max_and_min("hfddshjkl")) 
# print(c1,c2)   #c1,c2这里看不到（超出了c1,c2作用域） 

# def show():
#     print(n1,n2) 

# show() 

c1,c2 = max_and_min("hjkdsa")
print(c1,c2) 

#练习
# def is_palindrome(string):
#     """
#     判断字符串string是回文
#     :param string:
#     :return:
#     """
#     middle = len(string)//2
#     i=0
#     j=-1
#     n=0
#     while n<=middle:
#         if string[i+n]==string[j-n]:
#             n+=1
#         else:
#             mystr=string+"不是回文"
#             break
#     else:
#         mystr=string+"是回文"
#     return mystr  

def is_palindrome(string):
    """
    判断字符串string是回文
    :param string:
    :return:
    """
    middle = len(string)//2
    i=0
    j=-1
    while i<=middle:
        if string[i]==string[j-i]:
            i+=1
        else:
            mystr=string+"不是回文"
            break
    else:
        mystr=string+"是回文"
    return mystr  


print(is_palindrome('abcddcba'))
print(is_palindrome('pythonohtyp'))
print(is_palindrome('bookkob'))


 







